Conversation
feat: 이모지 선택 키보드 내비게이션 추가
feat: 첨부 미디어 재생 및 고정 플레이어 개선
…account-dropdown-open fix: 오버레이 열림 시 단축키 차단
fix: 리노트 리액션 대상 정규화
뽀모도로 타이머 단축키 및 투두 내비게이션
…actor refactor: apply AGENTS best practices
fix: 미스키 마크다운 일반 링크 처리
…file fix: 멘션 핸들 클릭 프로필 동작 보강
fix: 마크다운 멘션 링크 복원
Cloudflare Pages Functions로 OG 메타를 가져와 production에서만 프리뷰를 채운다.
별도 Pages 프로젝트로 develop 브랜치를 배포한다.
미스키 URL 프리뷰 프록시 추가
|
@copilot 컨플릭트 해결해줄래? |
There was a problem hiding this comment.
Pull request overview
This PR synchronizes v0.14.0 from the develop branch to main, introducing significant new features including URL preview proxy via Cloudflare Workers, enhanced markdown rendering with mention support, video/audio media handling with floating video player, keyboard navigation for emoji pickers, Pomodoro timer improvements, and a migration from GitHub Pages to Cloudflare Pages for beta deployments.
Changes:
- Added URL preview proxy with SSRF protection and metadata extraction
- Enhanced markdown renderer with @-mention parsing and bare URL linkification
- Implemented floating video player with resize controls and audio/video media support
- Added comprehensive keyboard navigation for emoji pickers and Pomodoro timer
- Migrated beta deployment from GitHub Pages to Cloudflare Pages
Reviewed changes
Copilot reviewed 20 out of 20 changed files in this pull request and generated 16 comments.
Show a summary per file
| File | Description |
|---|---|
functions/api/preview.ts |
New Cloudflare Worker for URL preview with security validations |
src/ui/utils/markdown.ts |
Enhanced with mention parsing, bare URL linkification, and flexible rendering options |
src/ui/utils/markdown.test.ts |
Added tests for new linkification features |
src/ui/components/TimelineItem.tsx |
Major update with floating video player, preview card fetching, improved mention handling |
src/ui/components/PomodoroTimer.tsx |
Added keyboard shortcuts (S/X/F) and todo list navigation with arrow keys |
src/ui/components/ComposeBox.tsx |
Enhanced emoji picker with keyboard navigation (arrows, enter, escape) |
src/ui/components/ReactionPicker.tsx |
Added full keyboard navigation for emoji selection |
src/ui/components/TimelineSection.tsx |
Fixed indentation and added keyboard event handling |
src/ui/components/StatusModal.tsx |
Added onUpdateStatus prop for preview card updates |
src/ui/components/ProfileModal.tsx |
Fixed indentation and added onUpdateStatus callback |
src/ui/components/AccountSelector.tsx |
Added emoji picker detection to prevent conflicts |
src/ui/content/shortcuts.ts |
Documented new emoji picker and Pomodoro shortcuts |
src/ui/styles/components.css |
Added styles for floating video, media attachments, and Pomodoro selection |
src/infra/misskeyMapper.ts |
Enhanced media attachment mapping with kind inference and preview URLs |
src/infra/mastodonMapper.ts |
Enhanced media attachment mapping with kind inference |
src/infra/UnifiedApiClient.ts |
Removed type assertions, simplified to use interface methods |
src/domain/types.ts |
Added MediaAttachmentKind type and enhanced MediaAttachment structure |
src/App.tsx |
Added timeline selection, fixed reaction handling for reblogs, alt text updates |
index.html |
Updated CSP to allow media sources and localhost connections |
.github/workflows/deploy.yml |
Migrated from GitHub Pages to Cloudflare Pages deployment |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
# Conflicts: # src/ui/components/TimelineItem.tsx
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 20 out of 20 changed files in this pull request and generated 6 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| return !hasScheme || /^https?:/i.test(trimmed); | ||
| }; | ||
|
|
||
| const normalizeMentionHandle = (handle: string): string => handle.replace(/^@/, "").trim().toLowerCase(); |
There was a problem hiding this comment.
The normalizeMentionHandle function is duplicated across three files:
- src/ui/utils/markdown.ts (line 20)
- src/ui/components/TimelineItem.tsx (line 16-17)
- src/ui/utils/linkify.ts (line 22)
This code duplication violates the DRY principle and makes maintenance harder. If the normalization logic needs to change, it must be updated in three places. Consider extracting this function to a shared utility module (e.g., src/ui/utils/mention.ts) and importing it where needed.
| const normalizeMentionHandle = (handle: string): string => handle.replace(/^@/, "").trim().toLowerCase(); | |
| const normalizeMentionHandle = (handle: string): string => { | |
| const withoutAt = handle.startsWith("@") ? handle.slice(1) : handle; | |
| return withoutAt.trim().toLowerCase(); | |
| }; |
Summary
Notes